package com.wfm.leetcode.editor.cn;
public class PSix3不同路径II{
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] dp = new int[m][n];
        // 初始化第0行, 遇到障碍物，后续都不能走，都为0
        boolean flag = true;
        for (int i = 0; i < m; i++) {
            if(obstacleGrid[i][0]==1){
                flag=false;
            }
            if(flag){
                dp[i][0]=1;
            }else{
                dp[i][0]=0;
            }
        }
        // 初始化第0列，遇到障碍物，后续都不能走，都为0
        flag = true;
        for (int i = 0; i < n; i++) {
            if(obstacleGrid[0][i]==1){
                flag=false;
            }
            if(flag){
                dp[0][i]=1;
            }else{
                dp[0][i]=0;
            }
        }
        // 从【1，1】开始，依赖左和上
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                if(obstacleGrid[i][j]==1){
                    dp[i][j]=0;
                }else {
                    dp[i][j]=dp[i][j-1]+dp[i-1][j];
                }
            }
        }
        return dp[m-1][n-1];
    }
}
//leetcode submit region end(Prohibit modification and deletion)

    public static void main(String[] args) { 
        Solution solution = new PSix3不同路径II().new Solution();
    }
}